// 功能说明
// 运行本文件 node localGet.js
// 功能:快速替换 多语言 langJson('确定')
// 为  langJson("确定",'(项目名称(PN)).txt.((多语言版本号(VS)).42')

// 如果已经是 langJson("取消",'xxxxx') 则不替换

// 替换后 项目根目录 生成 langPage 文件夹
// langPage/src 为 替换成功的 原来的src 副本
// 并且文件夹下面生成 langJson.json 将 它交给后台

// 正则删除旧的 key
// ,\s*'bit_fire.txt.v(0|[1-9][0-9]*).(0|[1-9][0-9]*)'
// ,\s*'inscdoge.txt.v(0|[1-9][0-9]*).(0|[1-9][0-9]*)'

const readline = require('readline')
let glob = require('glob')
var fs = require('fs')
var chalk = require('chalk')
const request = require('request')
var newUserJson = {}
// 是否全部生成
const replaceAll = false
// 项目名称
const PN = 'bit_fire'
// 多语言版本号
const VS = 'v1'
// 需要替换的文件夹路径
const SourcePath = [
    {
        path: 'src/page/',
        suffix: 'vue',
    },
    {
        path: 'src/components/',
        suffix: 'vue',
    },
]

let dirBorn = (path, content) => {
    /* 创建相应目录 */
    let tempDir = path.split('/')
    tempDir.pop()
    if (!fs.existsSync('./langPage/' + tempDir.join('/'))) {
        fs.mkdirSync('./langPage/' + tempDir.join('/'), { recursive: true }, (err) => {
            if (err) throw err
        })
    }
    /* 文件写入 */
    fs.writeFileSync(
        './langPage/' + path,
        `${content}\n\n`,
        {
            flag: 'w',
        },
        function (err, data) {
            if (err !== null) {
                console.log(err)
            }
        }
    )
}

let index = 0
let number = 1
let filelist = []

let langJson = {}

let run = () => {
    SourcePath.forEach((item) => {
        glob(item.path + `**/*.${item.suffix}`, function (er, files) {
            files.forEach((subItem) => {
                filelist.push(subItem)
            })
        })
    })
}
run()

let http = ({ url, method, params }) => {
    return new Promise((resolve, rejects) => {
        request(
            {
                method,
                uri: url,
                json: true,
                headers: {
                    'content-type': 'application/json',
                },
                body: params,
            },
            (error, response, body) => {
                if (!error && response.statusCode == 200) {
                    resolve(body)
                } else if (!error) {
                    rejects(body)
                } else {
                    rejects(error)
                }
            }
        )
    })
}

let check = (val) => {
    return Object.keys(langJson).find((item) => {
        return langJson[item] == val
    })
}

let time = setInterval(() => {
    console.log(`
  `)
    if (filelist[index]) {
        console.log(`Source:${chalk.green(filelist[index])}`)
        let content = fs.readFileSync(filelist[index], 'utf-8')
        let list = content.match(/langJson\(\n*\s*('|")(.*?)('|")\n*\s*\)/g)

        if (!list) {
            list = []
        } else {
            list = list.filter((item) => {
                return item.indexOf(`${PN}.txt`) == -1
            })
        }

        list.forEach((item, index) => {
            let value = item.replace(/langJson\(\n*\s*('|")/, '').replace(/('|")\n*\s*\)/g, '')
            let key = check(value)
            let isUp = true

            if (!key) {
                key = `${PN}.txt.${VS}.${number}`
                langJson[key] = value
                isUp = true

                // 在此处写入 json
                newUserJson[key] = value

                var data = JSON.stringify(newUserJson)

                fs.writeFile('lang.json', data, (err) => {
                    if (err) {
                        throw err
                    }
                    // console.log("JSON data is saved.", data);
                })

                // http({
                //   url: "http://192.168.1.166:8701/api/config/saveWebLang",
                //   method: "post",
                //   params: {
                //     key,
                //     val: value,
                //     langKey: "zh_CN"
                //   }
                // })
                //   .then(res => {
                //     console.log(res);
                //   })
                //   .catch(err => {
                //     console.log(err);
                //   });
            } else {
                isUp = false
            }

            console.log(`${value}`)

            content = content.replace(item, `${item.slice(0, item.length - 1)},'${key}')`)

            if (isUp) {
                number += 1
            }
        })
        if (replaceAll) {
            dirBorn(filelist[index], content)
        } else {
            if (list.length) {
                dirBorn(filelist[index], content)
            }
        }

        index += 1
    } else {
        clearInterval(time)
        console.log(chalk.red('请确认多语言版本号,防止键值冲突!!!'))
        console.log(`
    `)
        dirBorn('langJson.json', JSON.stringify(langJson))
    }
}, 100)
